package com.aasa.siccosap.dao;

import java.sql.CallableStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;

import javax.sql.DataSource;

import org.apache.log4j.Logger;

import oracle.jdbc.OracleTypes;

import com.aasa.siccosap.bean.ParametrosGarantia;
import com.aasa.siccosap.bean.ParametrosGenerales;
import com.aasa.siccosap.bean.TotalesGarantia;
import com.aasa.siccosap.util.Constantes;

public class TotalesGarantiaDAO extends ConsultaClienteBaseDAO{

	static Logger logger = Logger.getLogger("TotalesGarantiaDAO.class");
	public TotalesGarantiaDAO()	throws accesoDaoException {
		super();
	}
	
	public TotalesGarantiaDAO(DataSource dataSource) {
		super(dataSource);
	}
	
	public TotalesGarantia consultarTotalesGarantiasBancarias(
			ParametrosGarantia parametros) throws Exception{
		TotalesGarantia totalesGarantia = new TotalesGarantia();
		
		this.storedProcedure = "begin CONSULTA_GARANTIAS_PKG.P_DISPONIBILIDAD_GTIA_BANC(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?); end;";
		totalesGarantia = consultarTotalesGarantias(parametros);
			
		return totalesGarantia;
	}
	
	public TotalesGarantia consultarTotalesGarantiasPorLinea(
			ParametrosGarantia parametros) throws Exception{
		TotalesGarantia totalesGarantia = new TotalesGarantia();
		
		this.storedProcedure = "begin CONSULTA_GARANTIAS_PKG.P_DISPONIBILIDAD_GTIA_LINEA(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?); end;";
		totalesGarantia = consultarTotalesGarantias(parametros);
			
		return totalesGarantia;
	}
	
	public TotalesGarantia consultarTotalesGarantias(ParametrosGenerales parametros) throws Exception{
        
        this.av_message = null;
                
        TotalesGarantia consultaTotalGarantiasPorLinea=new TotalesGarantia();
        
        try{
                this.conn = dataSource.getConnection();
                this.stmt = this.conn.prepareCall(storedProcedure);
                              
                configuraParametrosTotalesGarantia(parametros);
                
                this.stmt.execute();

                //Se obtiene la respuesta error/exito del stored
                this.av_message = (String)stmt.getObject(1);                	
                    if(this.av_message.trim().toUpperCase().endsWith(Constantes.NO_ERRORS)){
                    	consultaTotalGarantiasPorLinea = creaRegistroTotalesGarantia();
                    	                    	                                           
	                }else{
	                    return null;
	                }


        }catch (Exception e){
                e.printStackTrace();
                return null;
        }finally{
        		close(this.conn, null, stmt);
        }
        return(consultaTotalGarantiasPorLinea);        
    }

	private CallableStatement configuraParametrosTotalesGarantia(
			ParametrosGenerales parametros) throws SQLException{
            	
    	stmt.registerOutParameter(1, OracleTypes.VARCHAR);               
        stmt.registerOutParameter(2, OracleTypes.FLOAT);
        stmt.registerOutParameter(3, OracleTypes.FLOAT);
        stmt.registerOutParameter(4, OracleTypes.FLOAT);
        stmt.registerOutParameter(5, OracleTypes.FLOAT);
        stmt.registerOutParameter(6, OracleTypes.FLOAT);
        stmt.registerOutParameter(7, OracleTypes.FLOAT);
        stmt.registerOutParameter(8, OracleTypes.FLOAT);
        stmt.registerOutParameter(9, OracleTypes.FLOAT);
        stmt.registerOutParameter(10, OracleTypes.FLOAT);
        stmt.registerOutParameter(11, OracleTypes.FLOAT);
        stmt.registerOutParameter(12, OracleTypes.FLOAT);
        stmt.registerOutParameter(13, OracleTypes.FLOAT);
        stmt.registerOutParameter(14, OracleTypes.FLOAT);
        stmt.registerOutParameter(15, OracleTypes.FLOAT);
        stmt.registerOutParameter(16, OracleTypes.FLOAT);
        stmt.registerOutParameter(17, OracleTypes.FLOAT);
        stmt.registerOutParameter(18, OracleTypes.FLOAT);
        stmt.registerOutParameter(19, OracleTypes.FLOAT);
        stmt.registerOutParameter(20, OracleTypes.FLOAT);
        stmt.registerOutParameter(21, OracleTypes.FLOAT);
        stmt.registerOutParameter(22, OracleTypes.FLOAT);
        stmt.registerOutParameter(23, OracleTypes.FLOAT);
        stmt.registerOutParameter(24, OracleTypes.VARCHAR);
            	
        stmt.setString(25, parametros.getStrPb_codigoCliente());
        
        return stmt;
	}

	private TotalesGarantia creaRegistroTotalesGarantia() throws SQLException {
		TotalesGarantia bean = new TotalesGarantia();
		
		bean.setDblPb_totalGarantiaSoles(((Double)stmt.getObject(2)).doubleValue());
		bean.setDblPb_totalDeudaSoles(((Double)stmt.getObject(3)).doubleValue());
		bean.setDblPb_guiasRecojoTubosSoles(((Double)stmt.getObject(4)).doubleValue());
		if(stmt.getObject(5) != null)
			bean.setDblPb_sobregiroAutorizadoSoles(((Double)stmt.getObject(5)).doubleValue());
		bean.setDblPb_subTotalSoles(((Double)stmt.getObject(6)).doubleValue());
		bean.setDblPb_saldoEfectivoSoles(((Double)stmt.getObject(7)).doubleValue());
		bean.setDblPb_saldoNotaCreditoSoles(((Double)stmt.getObject(8)).doubleValue());
		bean.setDblPb_subTotalSaldoSoles(((Double)stmt.getObject(9)).doubleValue());
		bean.setDblPb_pedidosDespachoSoles(((Double)stmt.getObject(10)).doubleValue());
		bean.setDblPb_pedidosNoProcesadosSoles(((Double)stmt.getObject(11)).doubleValue());
		bean.setDblPb_disponibleSoles(((Double)stmt.getObject(12)).doubleValue());
		
		bean.setDblPb_totalGarantiaDolares(((Double)stmt.getObject(13)).doubleValue());
		bean.setDblPb_totalDeudaDolares(((Double)stmt.getObject(14)).doubleValue());
		bean.setDblPb_guiasRecojoTubosDolares(((Double)stmt.getObject(15)).doubleValue());
		if(stmt.getObject(16) != null)
			bean.setDblPb_sobregiroAutorizadoDolares(((Double)stmt.getObject(16)).doubleValue());
		bean.setDblPb_subTotalDolares(((Double)stmt.getObject(17)).doubleValue());
		bean.setDblPb_saldoEfectivoDolares(((Double)stmt.getObject(18)).doubleValue());
		bean.setDblPb_saldoNotaCreditoDolares(((Double)stmt.getObject(19)).doubleValue());
		bean.setDblPb_subTotalSaldoDolares(((Double)stmt.getObject(20)).doubleValue());
		bean.setDblPb_pedidosDespachoDolares(((Double)stmt.getObject(21)).doubleValue());
		bean.setDblPb_pedidosNoProcesadosDolares(((Double)stmt.getObject(22)).doubleValue());
		bean.setDblPb_disponibleDolares(((Double)stmt.getObject(23)).doubleValue());
								
		bean.setStrPb_descripcion((String)stmt.getObject(24));
		
		return bean;
	}

	

	
}
